# 参数设置
MV = mv
CXX_BIN = main
CXX_CLEAN = clean
CXX_FLAGS = '-std=c++14'

BUILD_DIR = ./build/														# 生成的 .o 文件的路径
HEADER_PATH = -I./include/ -I../MiniSpline/Basic -I../MiniSpline/Object		# 头文件路径

CXX_SRC = $(wildcard ./src/*.cpp) \
	$(wildcard ../MiniSpline/Basic/*.cpp) \
	$(wildcard ../MiniSpline/Object/*.cpp)				# 测试源文件的两个来源路径
CXX_OBJS = $(notdir $(patsubst %cpp, %o, $(CXX_SRC)))	# 产生 .o 文件的目标，去掉路径

# 最终输出的 .o 文件（在完成输出之前，这个变量都是空的）
OUTPUT_OBJS = $(wildcard ./build/*.o)

# 默认目标：生成 main；依赖文件 CXX_OBJS，首先生成 CXX_OBJS 中的文件
# .o 文件生成在当前目录下，所以用去掉路径的文件即可生成 main
# 将 .o 文件移动到 build 文件下
$(CXX_BIN): $(CXX_OBJS)
	$(CXX) $(CXX_OBJS) -o $@ $(LIBS)
	$(MV) $(CXX_OBJS) $(BUILD_DIR)

# 生成 .o 文件
$(CXX_OBJS): $(CXX_SRC)
	$(CXX) $^ -c $(LIBS) $(CXX_FLAGS) $(HEADER_PATH)

# 伪指令：清除 main 和 .o 文件
.PHONY: $(CXX_CLEAN)
$(CXX_CLEAN):
	$(RM) $(CXX_BIN) $(OUTPUT_OBJS)